package com.opal.system.controller;


import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.opal.consts.CommonConst;
import com.opal.domain.ReturnMessageData;
import com.opal.system.entity.table.PKOrg;
import com.opal.system.entity.table.QCBasedoc;
import com.opal.system.entity.table.QCTlevm;
import com.opal.system.service.QCService;
import com.opal.utils.ExcelDownloadUtil;
import com.opal.vo.PageVO;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * QC功能
 */
@Controller
@RequestMapping("/qc")
public class QCController {

    @Autowired
    private QCService qcService;


    /**
     * 获取组织名称
     * @return
     */
    @RequestMapping("/pkOrg")
    @ResponseBody
    public List<PKOrg> pkOrg() {

        return qcService.selectBypkOrg();
    }


    /**
     * 获取不合格类型
     * @param
     * @return
     */
    @RequestMapping("/getFail")
    @ResponseBody
    public List<QCBasedoc> getFail(){
        return qcService.selectByDocname("不合格类型");
    }


    /**
     * 获取措施完成情况
     * @param
     * @return
     */
    @RequestMapping("/getMeasure")
    @ResponseBody
    public List<QCBasedoc> getMeasure(){
        return qcService.selectByDocname("措施完成情况");
    }


    /**
     * 获取发现环节
     * @param
     * @return
     */
    @RequestMapping("/getLink")
    @ResponseBody
    public List<QCBasedoc> getLink(){
        return qcService.selectByDocname("发现环节");
    }


    /**
     * 获取不合格等级
     * @param
     * @return
     */
    @RequestMapping("/getFailGrades")
    @ResponseBody
    public List<QCBasedoc> getFailGrades(){
        return qcService.selectByDocname("不合格等级");
    }


    /**
     * 查询品保管理记录
     * @param
     * @return
     */
    @RequiresRoles(CommonConst.PINGGUAN)
    @RequestMapping("/getQCTlevm")
    @ResponseBody
    public PageVO<QCTlevm> getQCTlevm(@RequestParam("page") int page,
                                      @RequestParam("rows") int rows, QCTlevm qcTlevm){
        return qcService.selectByTlevm(page,rows,qcTlevm);
    }


    /**
     * 修改品保管理记录
     * @param qcTlevm
     */
    @RequestMapping("/updateQCTlevm")
    @ResponseBody
    public ReturnMessageData updateQCTlevm(QCTlevm qcTlevm){
        return qcService.updateByTlevmSelective(qcTlevm);
    }


    /**
     * 删除品保管理记录
     * @param nosId
     * @return
     */
    @RequestMapping("/delectQCTlevm")
    @ResponseBody
    public ReturnMessageData delectQCTlevm(@RequestParam("nosId[]")List<String> nosId){
        return qcService.deleteByTlevm(nosId);
    }


    /**
     * 添加品保管理记录
     * @param qcTlevm
     * @return
     */
    @RequestMapping("/insertQCTlevm")
    @ResponseBody
    public ReturnMessageData insertQCTlevm(QCTlevm qcTlevm){
        return qcService.insertSelectiveTlevm(qcTlevm);
    }

    /**
     * 根据品号查询oracle的数据：用于方便用户查询oracle中 bd_material表数据后插入mysql中操作
     * @param
     * @return
     */
    @RequestMapping("/getQCTlevmByRemark1")
    @ResponseBody
    public ReturnMessageData getQCTlevmByRemark1(String remark1){
        return qcService.getQCTlevmByRemark1Service(remark1);
    }

    /**
     * 根据品号查询oracle的数据：用于方便用户查询oracle中 bd_material表数据后插入mysql中操作
     * @param
     * @return
     */
    @RequestMapping("/qcExportExcel")
    @ResponseBody
    public void qcExportExcel(HttpServletRequest request, HttpServletResponse response,QCTlevm qcTlevm){
        try {
            List<QCTlevm> qcTlevmList=qcService.selectALlTlevmService(qcTlevm);
            //准备要处理的数据：参数一，设置表头文字等参数，参数二：实体类(带有注解的行头)，参数三：数据库查询出来的数据数据
            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(),QCTlevm.class,qcTlevmList);
            //导出excel：设置名字
            ExcelDownloadUtil.ExcelUtil(response, workbook, "品保管理( " +qcTlevm.getDates()+"~"+qcTlevm.getEndDates()+ ").xls",request);
        }catch (IOException e){
            e.printStackTrace();
        }
    }


    @RequestMapping("{page}")
    public String skipPage(@PathVariable("page") String page) {
        return "qc/" + page;
    }
}
